package com.example.book_subscribe.common.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.HashMap;
import java.util.Map;

public class JwtUtils {

    // 定义密钥，建议实际项目中保存在环境变量或配置文件中
    private static final String SECRET_KEY = "qwer4564";

    /**
     * 生成 JWT token，将 map 数据进行加密
     *
     * @param claims 包含手机号和 openid 的 map
     * @return 生成的 JWT token
     */
    public static String generateToken(Map<String, Object> claims) {
        return Jwts.builder()
                .setClaims(claims) // 将 map 数据作为 claim 加入
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 使用 HS256 算法签名，并加密
                .compact();
    }

    /**
     * 解密 JWT token，返回 map 数据
     *
     * @param token JWT token
     * @return 解密后的 map 数据
     * @throws JwtException 如果 token 非法或解密失败则抛出异常
     */
    public static Map<String, Object> parseToken(String token) throws JwtException {
        Claims claims = Jwts.parser()
                .setSigningKey(SECRET_KEY) // 使用密钥进行解密
                .parseClaimsJws(token) // 解析 token
                .getBody();

        // 返回解密后的 claims (map)
        return new HashMap<>(claims);
    }
}
